package data;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import domain.ProyectoUsuario;

public class JDBCProyectoUsuarioDAO implements IProyectoUsuarioDAO{
	IUsuarioDAO userDAO;
	IProyectoDAO pDAO;
	
	public JDBCProyectoUsuarioDAO(){
		userDAO = new JDBCUsuarioDAO();
		pDAO = new JDBCProyectoDAO();
	}
	
	//Eliminar un Usuario de un Proyecto dado.
	public void deleteUsuario(String usuarioID){
		Connection conn = ConnectionManager.getInstance().checkOut();
		System.out.println("Conexion abierta");
		String sql = "DELETE FROM proyectousuario WHERE (usuarioOID = ?)";
		PreparedStatement stmt = null;
		
		try{
			stmt=conn.prepareStatement(sql);
			stmt.setString(1, usuarioID);
			stmt.executeUpdate();
		}catch(SQLException e){
			System.out.println("Message: "+ e.getMessage());
			System.out.println("SQLState: "+ e.getSQLState());
			System.out.println("ErrorCode: "+ e.getErrorCode());
		}finally{
			ConnectionManager.getInstance().checkIn(conn);
			System.out.println("Conexion cerrada");
			try{
				if(stmt != null){
					stmt.close();
				}
			}catch(SQLException e){
			}
		}
	}
	
	//Lista de usuarios asociados a un Proyecto dado.
	public List<ProyectoUsuario> selectAllUsuarios(String proyectoID) {
		Connection conn = ConnectionManager.getInstance().checkOut();
		System.out.println("Conexion abierta");
		List<ProyectoUsuario> lista = new LinkedList<ProyectoUsuario>();
		String sql = "SELECT * FROM proyectousuario WHERE (proyectoOID = ?)";
		PreparedStatement stmt = null;
		ResultSet result = null;
		
		try{
			stmt = conn.prepareStatement(sql);
			stmt.setString(1, proyectoID);
			result = stmt.executeQuery();
			while(result.next()){
				ProyectoUsuario pu = new ProyectoUsuario();
				pu.setUsuarioID(result.getString("usuarioOID"));
				pu.setProyectoID(result.getString("proyectoOID"));
				pu.setFechaAlta(result.getDate("fechaAlta"));
				pu.setFechaBaja(result.getDate("fechaBaja"));
				pu.setRol(result.getString("rol"));
				
				lista.add(pu);
			}
			
		}catch(SQLException e){
			System.out.println("Message: "+ e.getMessage());
			System.out.println("SQLState: "+ e.getSQLState());
			System.out.println("ErrorCode: "+ e.getErrorCode());
		}finally{
			ConnectionManager.getInstance().checkIn(conn);
			System.out.println("Conexion cerrada");
			try{
				if(result!=null){
					result.close();
				}
				if(stmt!=null){
					stmt.close();
				}
			}catch(SQLException e){
			}
		}	
		return lista;
	}
}